package com.clei.dto.db;

import com.clei.dto.ReadPropertyDesc;
import com.clei.utils.StringUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
 * MySQL 导出配置项
 *
 * @author Y
 * @date 2024-03-25
 **/
public class TDEngineExportConfig {

    /**
     * 属性描述list
     */
    private static final List<ReadPropertyDesc> PROPERTY_LIST;

    static {
        List<ReadPropertyDesc> propertyList = new ArrayList<>(6);
        propertyList.add(new ReadPropertyDesc("database", "数据库* : "));
        propertyList.add(new ReadPropertyDesc("sTables", "超表(多个以英文逗号分隔) : "));
        propertyList.add(new ReadPropertyDesc("tables", "子表(多个以英文逗号分隔) : "));
        propertyList.add(new ReadPropertyDesc("where", "WHERE筛选语句 : "));
        propertyList.add(new ReadPropertyDesc("exportPath", "导出路径* : "));
        propertyList.add(new ReadPropertyDesc("exportType", "导出类型(1仅数据 2仅结构 3数据和结构)* : "));
        PROPERTY_LIST = Collections.unmodifiableList(propertyList);
    }

    /**
     * 数据库
     */
    private String database;

    /**
     * 超表
     */
    private String sTables;

    /**
     * 子表
     */
    private String tables;

    /**
     * WHERE筛选语句
     */
    private String where;

    /**
     * 导出路径
     */
    private String exportPath;

    /**
     * 导出类型 1仅数据 2仅结构 3数据和结构
     */
    private String exportType;

    /**
     * 超表list
     */
    private List<String> sTableList;

    /**
     * 表list
     */
    private List<String> tableList;

    /**
     * 导出类型 1仅数据 2仅结构 3数据和结构
     */
    private Integer exportTypeValue;

    /**
     * 装配
     */
    public void assemble() {
        this.sTableList = StringUtil.isBlank(sTables) ? null : Arrays.stream(sTables.split(",")).collect(Collectors.toList());
        this.tableList = StringUtil.isBlank(tables) ? null : Arrays.stream(tables.split(",")).collect(Collectors.toList());
        int et = Integer.parseInt(exportType);
        this.exportTypeValue = et > 3 ? 3 : Math.max(et, 1);
    }

    public static List<ReadPropertyDesc> getPropertyList() {
        return PROPERTY_LIST;
    }

    public String getDatabase() {
        return database;
    }

    public String getWhere() {
        return where;
    }

    public String getExportPath() {
        return exportPath;
    }

    public List<String> getsTableList() {
        return sTableList;
    }

    public List<String> getTableList() {
        return tableList;
    }

    public Integer getExportTypeValue() {
        return exportTypeValue;
    }
}
